package com.wjm.servlet;

import com.wjm.http.HttpRequest;
import com.wjm.http.HttpResponse;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

/**
 * Data:2022年08月24日
 * Author:wjm
 * Content:
 *
 * 修改用户信息
 * 将用户修改的信息修改到user.txt文件中
 *
 */
public class UpdateUserServlet extends ServerServlet{

    @Override
    public void service(HttpResponse response,HttpRequest request){
        //获取用户修改后的信息
        String username = request.getParameters("user");
        String password = request.getParameters("pwd");
        String sex = request.getParameters("sex");
        String age = request.getParameters("age");


        //将修改的信息更新到user.txt文本中
        //对数据进行判断，是否为空，并且age是否有除数字外的字符
        if (password==null || sex==null || age==null || !age.matches("[0-9]+")){
            File file = new File("./webapps/myweb/update_error.html");
            //如果符合以上的条件，则把错误的页面传给HttpResponse响应给客户端展示
            response.setFileEntity(file);

        }else {//如果校验通过，就进行数据写入
            //创建RandomAccessFile对象
            try(RandomAccessFile randomAccessFile = new RandomAccessFile("user.txt","rw");) {

                //在将文件写入之前要先查找一下用户所在文本的位置
                for (int i=0;i<randomAccessFile.length()/100;i++){
                    //对指针的位置进行设置,因为每个用户数据都是100字节，所以0，100，200...后面读取32个字节都是用户名数据
                    randomAccessFile.seek(i*100);
                    //创建一个字节数组用于读取每个用户的用户名
                    byte[] data = new byte[32];
                    //读取已存在的用户名
                    randomAccessFile.read(data);
                    //将读到的字节数组转化为字符串
                    String name = new String(data,"utf-8");
                    //因为32位的字节数组中包含空字符，在转化位字符串时也转化了过来，所以需要进行去除空字符，在进行比较的时候才能比较
                    name = name.trim();


                    //如果能进入到if里面，则说明当前指针的位置刚好在password开始的位置，往后存入新的password就能将旧的覆盖掉
                    if (username.equals(name)){
                        //将字符串转化为byte数组
                        byte[] bytes = password.getBytes("utf-8");
                        //对数组进行扩容到32字节长度
                        bytes = Arrays.copyOf(bytes,32);
                        //将password写入到user.txt文件中
                        randomAccessFile.write(bytes);

                        //将字符串转化为byte数组
                        bytes = sex.getBytes("utf-8");
                        //对数组进行扩容到32字节长度
                        bytes = Arrays.copyOf(bytes,32);
                        //将sex写入到user.txt文件中
                        randomAccessFile.write(bytes);

                        //将String的age，转化为int类型，通过包装类的拆装箱机制
                        //将age写入到user.txt文件中
                        randomAccessFile.writeInt(Integer.valueOf(age));
                        //结束循环
                        break;
                    }

                }

                /*
                    更新成功返回
                    可以放回成功页面，
                    或者直接跳转到showAllData的页面
                */
                //File file = new File("./webapps/myweb/register_success.html");
                //response.setFileEntity(file);
                ShowAllDataServlet showAllDataServlet = new ShowAllDataServlet();
                showAllDataServlet.service(response,request);
                return;


            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


        }


    }




}
